package designpattern.proxy.dynamicproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author 赵乾坤
 * @since 2021-12-04 15:02
 */
public class JdkProxy {
    public static void main(String[] args) {

        IRentingHouse rentingHouse = new RentingHouseImpl();  // 委托对象---委托方


        // 从代理对象工厂获取代理对象
        IRentingHouse jdkProxy = (IRentingHouse) ProxyFactory.getInstance().getJdkProxy(rentingHouse);
        jdkProxy.rentHosue();



        // 1.类加载器 2.要实现接口 3 一个InvocationHandler实现类 this当前对象
   /*     IRentingHouse proxyInstance = (IRentingHouse) Proxy.newProxyInstance(rentingHouse.getClass().getClassLoader(), rentingHouse.getClass().getInterfaces(),
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
                        Object result = null;

                        // 写增强逻辑
                        System.out.println("中介（代理）收取服务费3000元");
                        // 调用原有业务逻辑  参数1：那个对象方法，2那个对象参数
                        result = method.invoke(rentingHouse, args);
                        System.out.println("客户信息卖了3毛钱");
                        return result;
                    }
                });*/

    }
}

